/*
 * Copyright 2018 Google
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

import UIKit

class ModalMessageViewController: CommonMessageTestVC {
  let displayImpl = InAppMessagingDefaultDisplayImpl()

  @IBOutlet var verifyLabel: UILabel!

  override func messageClicked(_ inAppMessage: InAppMessagingDisplayMessage,
                               with action: InAppMessagingAction) {
    super.messageClicked(inAppMessage, with: action)
    verifyLabel.text = "message clicked!"
  }

  override func messageDismissed(_ inAppMessage: InAppMessagingDisplayMessage,
                                 dismissType: FIRInAppMessagingDismissType) {
    super.messageDismissed(inAppMessage, dismissType: dismissType)
    verifyLabel.text = "message dismissed!"
  }

  @IBAction func showRegular(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let imageRawData = produceImageOfSize(size: CGSize(width: 200, height: 200))
    let fiamImageData = InAppMessagingImageData(imageURL: "url not important",
                                                imageData: imageRawData!)

    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: normalMessageTitle,
                                                  bodyText: normalMessageBody,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: fiamImageData,
                                                  actionButton: defaultActionButton,
                                                  actionURL: URL(string: "http://firebase.com"))

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithoutImage(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: normalMessageTitle,
                                                  bodyText: normalMessageBody,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: nil,
                                                  actionButton: defaultActionButton,
                                                  actionURL: URL(string: "http://firebase.com"))

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithoutButton(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let imageRawData = produceImageOfSize(size: CGSize(width: 200, height: 200))
    let fiamImageData = InAppMessagingImageData(imageURL: "url not important",
                                                imageData: imageRawData!)

    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: normalMessageTitle,
                                                  bodyText: normalMessageBody,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: fiamImageData,
                                                  actionButton: nil,
                                                  actionURL: nil)

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithoutImageAndButton(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: normalMessageTitle,
                                                  bodyText: normalMessageBody,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: nil,
                                                  actionButton: nil,
                                                  actionURL: nil)

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithLargeBody(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: normalMessageTitle,
                                                  bodyText: longBodyText,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: nil,
                                                  actionButton: defaultActionButton,
                                                  actionURL: URL(string: "http://firebase.com"))

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithLargeTitleAndBody(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let imageRawData = produceImageOfSize(size: CGSize(width: 200, height: 200))
    let fiamImageData = InAppMessagingImageData(imageURL: "url not important",
                                                imageData: imageRawData!)

    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: longTitleText,
                                                  bodyText: longBodyText,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: fiamImageData,
                                                  actionButton: defaultActionButton,
                                                  actionURL: URL(string: "http://firebase.com"))

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithLargeTitle(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: longBodyText,
                                                  bodyText: normalMessageBody,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: nil,
                                                  actionButton: defaultActionButton,
                                                  actionURL: URL(string: "http://firebase.com"))

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithLargeTitleAndBodyWithoutImage(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: longTitleText,
                                                  bodyText: longBodyText,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: nil,
                                                  actionButton: defaultActionButton,
                                                  actionURL: URL(string: "http://firebase.com"))

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithLargeTitleWithoutBodyWithoutImageWithoutButton(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: longBodyText,
                                                  bodyText: "",
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: nil,
                                                  actionButton: nil,
                                                  actionURL: nil)

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithWideImage(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let imageRawData = produceImageOfSize(size: CGSize(width: 600, height: 200))
    let fiamImageData = InAppMessagingImageData(imageURL: "url not important",
                                                imageData: imageRawData!)

    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: normalMessageTitle,
                                                  bodyText: normalMessageBody,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: fiamImageData,
                                                  actionButton: defaultActionButton,
                                                  actionURL: URL(string: "http://firebase.com"))

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  @IBAction func showWithThinImage(_ sender: Any) {
    verifyLabel.text = "Verification Label"
    let imageRawData = produceImageOfSize(size: CGSize(width: 200, height: 600))
    let fiamImageData = InAppMessagingImageData(imageURL: "url not important",
                                                imageData: imageRawData!)

    let modalMessage = InAppMessagingModalDisplay(messageID: "messageId",
                                                  campaignName: "testCampaign",
                                                  renderAsTestMessage: false,
                                                  triggerType: .onAnalyticsEvent,
                                                  titleText: normalMessageTitle,
                                                  bodyText: normalMessageBody,
                                                  textColor: UIColor.black,
                                                  backgroundColor: UIColor.blue,
                                                  imageData: fiamImageData,
                                                  actionButton: defaultActionButton,
                                                  actionURL: URL(string: "http://firebase.com"))

    displayImpl.displayMessage(modalMessage, displayDelegate: self)
  }

  override func viewDidLoad() {
    super.viewDidLoad()

    // Do any additional setup after loading the view.
  }

  override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
  }
}
